# Auto-generated by leda
import leda
leda.set_interact_mode(leda.StaticIpywidgetsInteractMode())
# Auto-generated by leda
import os
from leda.vendor.static_ipywidgets.static_ipywidgets import interact as static_interact
static_interact.IMAGE_MANAGER = static_interact.InlineImageManager()
import abc
import dataclasses
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from typing_extensions import override
import leda
leda.init("matplotlib")
plt.rcParams.update({"figure.max_open_warning": 0})
%%HTML
<!-- Auto-generated by leda -->
<h2>Table of Contents</h2>
<ol type='I'>
<li type='I'><a href='#leda-demo:-matplotlib'>leda demo: matplotlib</a></li>
<ol type='A'>
<li type='A'><a href='#Info'>Info</a></li>
<li type='A'><a href='#Data'>Data</a></li>
<li type='A'><a href='#Visualization'>Visualization</a></li>
<ol type='1'>
<li type='1'><a href='#Simple'>Simple</a></li>
<li type='1'><a href='#Objects-as-Params'>Objects as Params</a></li>
</ol>
</ol>
</ol>
Widgets
Use the %%interact expr0;expr1;... cell magic to set widgets for that cell.
Each expression is of the form x=y, where x becomes the local var of the cell and y can be a:
list to indicate choices for a dropdown widgettuple to indicate values for an int slider (start, stop, and optional step).E.g.:
%%interact column=list(df.columns)
%%interact column=list(df.columns);mult=[1, 2, 3]
%%interact column=list(df.columns);window=(10, 50)
%%interact column=list(df.columns);window=(10, 50, 5)
Table of Contents
Use the %toc line magic to substitute with a table of contents in static mode.
Toggles
Click the Toggle input cells button at the bottom to reveal input cells.
Using randomly generated data (with fixed seed).
df = pd.DataFrame(
np.random.RandomState(42).rand(100, 10), columns=list("abcdefghij")
)
%%interact column=list(df.columns);mult=[1, 2, 3]
title = f"column={column!r}, mult={mult}"
(df[[column]] * mult).plot(figsize=(15, 8), lw=2, title=title)
Generating results: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 30/30 [00:00<00:00, 122.13it/s] Generating HTML: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 30/30 [00:01<00:00, 21.21it/s]
%%interact column=list(df.columns);window=(10, 50, 5)
ax = (
df[[column]]
.iloc[-window:]
.plot(figsize=(15, 8), lw=2, title=f"column={column!r}, window={window}")
)
ax
Generating results: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 90/90 [00:00<00:00, 115.54it/s] Generating HTML: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 90/90 [00:03<00:00, 23.64it/s]
@dataclasses.dataclass(frozen=True)
class Calculator(abc.ABC):
@abc.abstractmethod
def calc(self, df: pd.DataFrame) -> pd.DataFrame: ...
@dataclasses.dataclass(frozen=True)
class CumSumCalculator(Calculator):
@override
def calc(self, df: pd.DataFrame) -> pd.DataFrame:
return df.cumsum()
@dataclasses.dataclass(frozen=True)
class EWMMeanCalculator(Calculator):
com: float
@override
def calc(self, df: pd.DataFrame) -> pd.DataFrame:
return df.ewm(com=self.com).mean()
calcs = [
CumSumCalculator(),
EWMMeanCalculator(com=5),
EWMMeanCalculator(com=10),
]
%%interact column_group=["abc", "def", "ghij"];calc=calcs
calced_df = calc.calc(df[list(column_group)])
title = f"column_group={column_group!r}, calc={calc}"
calced_df.plot(figsize=(15, 8), lw=2, title=title)
Generating results: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 9/9 [00:00<00:00, 51.22it/s] Generating HTML: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 9/9 [00:00<00:00, 20.21it/s]
# Auto-generated by leda
import leda
leda.show_input_toggle()
# Auto-generated by leda
import leda
leda.show_std_output_toggle()